package cn.minimelon.api.service.data.utils;

import cn.hutool.core.util.StrUtil;
import cn.minimelon.api.domain.common.LoginUser;
import cn.minimelon.api.domain.data.PropQueryVO;
import cn.minimelon.api.domain.enums.DataTypeEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
public class DataQueryUtils {
    /**
     * 收集搜索条件，方便统计
     */
    public static void collectQueryCond(String modelCode, List<PropQueryVO> condList, LoginUser user) {
        log.info("collectQueryCond user:{} code:{} cond:{}", user.getUserId(), modelCode, condList.size());
    }

    /**
     * 构造界面搜索条件
     */
    public static void buildCustomCond(QueryWrapper<?> qw, List<PropQueryVO> cl) {
        for (PropQueryVO prop : cl) {
            if (StrUtil.equals(DataTypeEnum.TEXT.getVal(), prop.getDataType())) {
                if (StrUtil.equals("eq", prop.getQueryType())) {
                    // 等于
                    qw.eq(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("ne", prop.getQueryType())) {
                    // 不等于
                    qw.ne(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("like", prop.getQueryType())) {
                    // 包含
                    qw.like(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("notLike", prop.getQueryType())) {
                    // 不包含
                    qw.like(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("likeLeft", prop.getQueryType())) {
                    // 右模糊匹配条件
                    qw.likeLeft(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("likeRight", prop.getQueryType())) {
                    // 左模糊匹配条件
                    qw.likeRight(prop.getColCode(), prop.getVal());
                } else {
                    log.info("not support queryType: {}", prop.getQueryType());
                }
            } else if (StrUtil.equals(DataTypeEnum.NUMB.getVal(), prop.getDataType())) {
                if (StrUtil.equals("eq", prop.getQueryType())) {
                    // 等于
                    qw.eq(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("ne", prop.getQueryType())) {
                    // 不等于
                    qw.ne(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("gt", prop.getQueryType())) {
                    // 大于
                    qw.gt(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("lt", prop.getQueryType())) {
                    // 小于
                    qw.lt(prop.getColCode(), prop.getVal());
                } else if (StrUtil.equals("between", prop.getQueryType())) {
                    // 介于
                    qw.between(prop.getColCode(), prop.getStartVal(), prop.getEndVal());
                }
            } else if (StrUtil.equals(DataTypeEnum.DATE.getVal(), prop.getDataType())) {
                if (StrUtil.equals("between", prop.getQueryType())) {
                    // 介于
                    qw.between(prop.getColCode(), prop.getStartVal() + " 00:00:00.000", prop.getEndVal() + " 23:59:59.999");
                }
            } else {
                log.info("not support dataType: {}", prop.getDataType());
            }
        }
    }
}
